///////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2021, Tom Zhao personal. ("UsingSTLEx")
// This software is a personal tools project by Tom Zhao.
// Description:
///////////////////////////////////////////////////////////////////////////////////////////

// C program to find Armstrong number

#include <stdio.h>

/* Function to calculate x raised to the power y */
int power(int x, unsigned int y) {
  if (y == 0) return 1;
  if (y % 2 == 0) return power(x, y / 2) * power(x, y / 2);
  return x * power(x, y / 2) * power(x, y / 2);
}

/* Function to calculate order of the number */
int order(int x) {
  int n = 0;
  while (x) {
    n++;
    x = x / 10;
  }
  return n;
}

// Function to check whether the given number is
// Armstrong number or not
int isArmstrong(int x) {
  // Calling order function
  int n = order(x);
  int temp = x, sum = 0;
  while (temp) {
    int r = temp % 10;
    sum += power(r, n);
    temp = temp / 10;
  }

  // If satisfies Armstrong condition
  if (sum == x)
    return 1;
  else
    return 0;
}

// Driver Program
int main() {
  int x = 153;
  if (isArmstrong(x) == 1)
    printf("True\n");
  else
    printf("False\n");

  x = 1253;
  if (isArmstrong(x) == 1)
    printf("True\n");
  else
    printf("False\n");

  return 0;
}
